home *** CD-ROM | disk | FTP | other *** search
- /*
- * VOR(onoi)A(nalysis)_IO
- *
- * i/o routines for Voronoi analysis
- *
- */
- #include <stdlib.h>
- #include <stdio.h>
- #include "vora.h"
-
- #define OFF 0
- #define ON 1
-
- /* globals */
- extern int P_STATS;
- extern int Q_STATS;
- extern int SAVE_DATA;
- extern char *HIST_HEADER;
-
- /*
- * write histogram data to output file of type .hdt
- */
- void
- write_hdt_data (fpOut, np, foo, h, ds, nd)
- FILE *fpOut;
- int np, nd;
- float *foo;
- struct Histo *h;
- struct Tuple *ds;
- {
- int i;
-
- fprintf (fpOut, "%d\n", h->nb, np);
-
- for (i = 0; i < np; i++)
- fprintf (fpOut, "%f\n", *(foo + i));
-
- for (i = 0; i < h->nb; i++)
- fprintf (fpOut, "%f %f\n", (float) i, h->ph[i]);
-
- /*
- * following entries (histogram parms) not read by fitting routine
- */
- fprintf (fpOut, "%s\n", HIST_HEADER);
- fprintf (fpOut, " no objects: %d\n", h->nh);
- fprintf (fpOut, " mean: %lf\n", h->mean);
- fprintf (fpOut, " std_dev: %lf\n", h->sdev);
- fprintf (fpOut, " bin_width: %f\n", h->bw);
- fprintf (fpOut, " min: %f, max: %f\n", h->amin, h->amax);
-
- /*
- * P - and Q - functions
- */
- if ((P_STATS == ON) || (Q_STATS == ON)) {
- if (P_STATS == ON)
- fprintf (fpOut, "p-function\n");
- if (Q_STATS == ON)
- fprintf (fpOut, "q-function\n");
- for (i = 0; i <= nd; i++)
- fprintf (fpOut, "%f %f\n", (ds + i)->x, (ds + i)->y);
- }
-
- if (SAVE_DATA == ON) {
- fprintf (fpOut, "input data for %s\n", HIST_HEADER);
- for (i = 0; i < h->nh; i++)
- fprintf (fpOut, "%f %f\n", (float) i, h->phd[i]);
- }
- }
-
-
- /*
- * log site topol data in .std (for retrieval by xsgt.c)
- */
- void
- log_st_data (FILE * fpOut, char *wbuf, int ns, struct vSite *s)
- {
- int inn, is;
-
- gprintf (fpOut, "...log site topology data in file: %s\n", wbuf);
- gprintf (fpOut, "...no records: %d\n", ns);
- gprintf (fpOut, "\n\n");
-
- for (is = 0; is < ns; is++) {
- gprintf (fpOut, "site: %3d; (%4.1f, %4.1f) -- ",
- (s + is)->sitenbr, (s + is)->coord.x, (s + is)->coord.y);
- gprintf (fpOut, "eFlag: %d, aoiFlag: %d; nnn: %2d\n",
- (s + is)->eFlag, (s + is)->aoiFlag, (s + is)->nnn);
- gprintf (fpOut, "...aVp: %u\n", (s + is)->v_area);
- gprintf (fpOut, "...(nn site index: nn distance)\n");
- for (inn = 0; inn < (s + is)->nnn; inn++) {
- gprintf (fpOut, " (%3d: %4.1f)\n",
- (s + is)->nnsi[inn], (s + is)->nnd[inn]);
- }
- gprintf (fpOut, "\n\n");
- }
- }
-
-
- /*
- * log polygon topol data in .ptd
- */
- void
- log_pt_data (FILE * fpOut, char *wbuf, int ns, struct vPoly *p, struct vEdge *e, struct vSite *v, int CPV)
- {
- int ie, is;
- int e_vO, e_vF;
- int iv, iflag = -1;
-
-
- gprintf (fpOut, "...log poly topology data in file: %s\n", wbuf);
- gprintf (fpOut, "...no records: %d\n", ns);
- gprintf (fpOut, "\n\n");
-
- for (is = 0; is < ns; is++) {
- gprintf (fpOut, "site: %3d; (%4.1f, %4.1f) -- ",
- (p + is)->sitenbr, (p + is)->coord.x, (p + is)->coord.y);
- gprintf (fpOut, "aoiF: %d, eFl: %d, lF: %d -- ",
- (p + is)->aoiFlag, (p + is)->eFlag, (p + is)->aoiFlag);
- gprintf (fpOut, "a: %6.1f; ne: %2d\n",
- (p + is)->area, (p + is)->ne);
-
- gprintf (fpOut, "...(edge_ind, edge_len, edge_pt_coords):\n");
- for (ie = 0; ie < (p + is)->ne; ie++) {
- gprintf (fpOut, " (%5d, %5d) -- ",
- (p + is)->pei[ie], (int) (p + is)->vel[ie]);
-
- e_vO = (e + ((p + is)->pei[ie]))->vO;
- e_vF = (e + ((p + is)->pei[ie]))->vF;
- if ((e_vO != -1) && (e_vF != -1)) {
- gprintf (fpOut, " (%3d, %3d) <--> (%3d, %3d)\n",
- F_TO_INT ((v + e_vO)->coord.x), F_TO_INT ((v + e_vO)->coord.y),
- F_TO_INT ((v + e_vF)->coord.x), F_TO_INT ((v + e_vF)->coord.y));
- }
- else {
- gprintf (fpOut, " edge crossed AOI bounds\n");
- }
- }
-
- if (CPV == 1) {
- gprintf (fpOut, "...(vx, vy):\n");
- for (ie = 0; ie < (p + is)->ne; ie++) {
- if (((iv = (p + is)->pvi[ie]) >= 0) &&
- /* redundant ?? */ ((v + iv)->aoiFlag == UnSet)) {
- gprintf (fpOut, " (%3d, %3d)",
- F_TO_INT ((v + iv)->coord.x),
- F_TO_INT ((v + iv)->coord.y));
- }
- else
- gprintf (fpOut, " (%3d, %3d)", iflag, iflag);
- }
- }
- gprintf (fpOut, "\n\n");
- }
- }
-
-
-
- /*
- * dump polygon vertex coordinates to .ptd;
- *
- * for convenience, write ne_max+1 sets of tuples (x, y);
- * for flaged sites, set coordinates to 0
- */
- void
- dump_poly_vc (FILE * fpOut, int ns, struct vPoly *p, struct vSite *v)
- {
- int ie, is, iv;
- int ne_max;
- int null = 0;
-
- ne_max = 0;
- for (is = 0; is < ns; is++) {
- if (((p + is)->aoiFlag == UnSet) &&
- ((p + is)->eFlag == UnSet) &&
- ((p + is)->lFlag == UnSet)) {
- if ((p + is)->ne > ne_max)
- ne_max = (p + is)->ne;
- }
- }
-
- /*
- * write file line-by-line, process unflagged polygons only
- */
- for (is = 0; is < ns; is++) {
- if (((p + is)->aoiFlag == UnSet) &&
- ((p + is)->eFlag == UnSet) &&
- ((p + is)->lFlag == UnSet)) {
-
- /* centroid */
- gprintf (fpOut, " %3d %3d",
- F_TO_INT ((p + is)->coord.x),
- F_TO_INT ((p + is)->coord.y));
-
- /* polygon vertices */
- for (ie = 0; ie < (p + is)->ne; ie++) {
- iv = (p + is)->pvi[ie];
- gprintf (fpOut, " %3d %3d",
- F_TO_INT ((v + iv)->coord.x),
- F_TO_INT ((v + iv)->coord.y));
- }
- for (ie = (p + is)->ne; ie < ne_max; ie++) {
- gprintf (fpOut, " %3d %3d", null, null);
- }
- gprintf (fpOut, "\n");
- }
- }
- }
-